local key = KEYS[1]
local threadId = ARGV[1]
local releaseTime = ARGV[2]

-- 判断锁是否是自己
if(redis.call("hexists", key, threadId) == 0) then
    -- 不是自己的锁
    return nil; -- 直接返回
end;
--是自己的锁， 重入次数减一
local count = redis.call("hincrby", key, threadId, "-1");
-- 判断计数器是否为0
if(count > 0) then
    -- 大于0 说明不能释放锁，重置有效期然后返回
    redis.call("expire", key, releaseTime);
    return nil;
else
    -- 等于0说明可以释放锁
    redis.call("del", key);
    return nil;
end;


